import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
import { segment } from 'oicq';
import fetch from 'node-fetch';
import { createLogger } from '../modules/Logger.js'; 

// 获取当前文件的路径
const __filename = fileURLToPath(import.meta.url);
// 获取当前文件所在的目录
const __dirname = path.dirname(__filename);

// 保存背景图数据的目录
const DATA_DIR = path.resolve(__dirname, '../data/背景图');
const BG_SQUARE_FILE = path.join(DATA_DIR, 'square_images.json');  // 方
const BG_VERTICAL_FILE = path.join(DATA_DIR, 'vertical_images.json'); // 竖

// 确保数据目录存在
if (!fs.existsSync(DATA_DIR)) {
  fs.mkdirSync(DATA_DIR);
}
if (!fs.existsSync(BG_SQUARE_FILE)) {
  fs.writeFileSync(BG_SQUARE_FILE, JSON.stringify([]));
}
if (!fs.existsSync(BG_VERTICAL_FILE)) {
  fs.writeFileSync(BG_VERTICAL_FILE, JSON.stringify([]));
}

class BackgroundImagesPlugin extends plugin {
  constructor() {
    super({
      name: 'background_images',  // 插件名称
      dsc: '背景图管理插件',
      event: 'message',
      priority: 500,
      rule: [
        { reg: "^#添加方背景图 (.+)$", fnc: 'addSquareBackgroundImage', permission: 'master' },
        { reg: "^#添加竖背景图 (.+)$", fnc: 'addVerticalBackgroundImage', permission: 'master' },
        { reg: "^#查看背景图$", fnc: 'previewBackgroundImages', permission: 'master' },
        { reg: "^#移除方背景图 (\\d+)$", fnc: 'removeSquareBackgroundImage', permission: 'master' },
        { reg: "^#移除竖背景图 (\\d+)$", fnc: 'removeVerticalBackgroundImage', permission: 'master' },
        { reg: "^#检查方背景图 (\\d+)$", fnc: 'checkSquareBackgroundImage', permission: 'master' },
        { reg: "^#检查竖背景图 (\\d+)$", fnc: 'checkVerticalBackgroundImage', permission: 'master' },
      ],
    });
    // 创建日志实例
    this.logger = createLogger(this.name);
  }

  // 获取用户头像的URL
  getAvatarUrl(userId) {
    return `https://q1.qlogo.cn/g?b=qq&s=0&nk=${userId}`;
  }

  async previewBackgroundImages(e) {
    this.logger.info('尝试查看背景图列表');  // 普通日志
    await e.reply('正在检查并发送全部背景图，请稍等...');
    
    // 获取用户信息
    const userId = e.user_id;
    const userNickname = e.sender.nickname || '未知用户';
    const userAvatar = this.getAvatarUrl(userId);  // 使用上面的函数获取头像URL

    const squareImages = this.loadBackgroundImages(BG_SQUARE_FILE);
    const verticalImages = this.loadBackgroundImages(BG_VERTICAL_FILE);

    const messages = [];

    // 使用机器人 ID 发送方背景图
    if (squareImages.length > 0) {
      messages.push({
        message: '康康方背景图：',
        user_id: Bot.uin,  // 使用机器人 ID 作为消息发送者 ID
        nickname: "背景图助手",  // 机器人的昵称
        face: this.getAvatarUrl(Bot.uin),  // 机器人的头像 URL
      });
      squareImages.forEach((url, index) => {
        messages.push({
          message: segment.image(url),
          user_id: userId,
          nickname: userNickname,  // 使用用户昵称
          face: userAvatar,  // 使用头像URL
        });
      });
    } else {
      messages.push({
        message: '当前没有任何方背景图。',
        user_id: Bot.uin,  // 使用机器人 ID 作为消息发送者 ID
        nickname: "背景图助手",  // 机器人的昵称
        face: this.getAvatarUrl(Bot.uin),  // 机器人的头像 URL
      });
    }

    // 使用机器人 ID 发送竖背景图
    if (verticalImages.length > 0) {
      messages.push({
        message: '康康竖背景图：',
        user_id: Bot.uin,  // 使用机器人 ID 作为消息发送者 ID
        nickname: "背景图助手",  // 机器人的昵称
        face: this.getAvatarUrl(Bot.uin),  // 机器人的头像 URL
      });
      verticalImages.forEach((url, index) => {
        messages.push({
          message: segment.image(url),
          user_id: userId,
          nickname: userNickname,  // 使用用户昵称
          face: userAvatar,  // 使用头像URL
        });
      });
    } else {
      messages.push({
        message: '当前没有任何竖背景图。',
        user_id: Bot.uin,  // 使用机器人 ID 作为消息发送者 ID
        nickname: "背景图助手",  // 机器人的昵称
        face: this.getAvatarUrl(Bot.uin),  // 机器人的头像 URL
      });
    }

    // 使用转发消息发送
    const forwardMsg = await e.group.makeForwardMsg(messages);
    await e.reply(forwardMsg);
    this.logger.info('查看背景图并发送图片完成');  // 普通日志
  }

  loadBackgroundImages(filePath) {
    try {
      const data = fs.readFileSync(filePath, 'utf-8');
      return JSON.parse(data);
    } catch (error) {
      console.error('加载背景图链接失败:', error);
      this.logger.error(`加载背景图失败：${error.message}`);  // 错误日志
      return [];
    }
  }

  saveBackgroundImages(filePath, images) {
    try {
      fs.writeFileSync(filePath, JSON.stringify(images, null, 2));
      this.logger.info('背景图链接已保存');  // 普通日志
    } catch (error) {
      console.error('保存背景图链接失败:', error);
      this.logger.error(`保存背景图失败：${error.message}`);  // 错误日志
    }
  }

  async addSquareBackgroundImage(e) {
    await this.addBackgroundImage(e, BG_SQUARE_FILE, '方背景图');
  }

  async addVerticalBackgroundImage(e) {
    await this.addBackgroundImage(e, BG_VERTICAL_FILE, '竖背景图');
  }

  async addBackgroundImage(e, filePath, type) {
    const imageUrl = e.msg.match(/https?:\/\/\S+/)[0];
    if (!imageUrl) {
      await e.reply(`请提供有效的${type}链接。`);
      return;
    }

    const backgroundImages = this.loadBackgroundImages(filePath);
    if (backgroundImages.includes(imageUrl)) {
      await e.reply(`该${type}已存在。`);
      return;
    }

    backgroundImages.push(imageUrl);
    this.saveBackgroundImages(filePath, backgroundImages);

    await e.reply(`${type}添加成功：${imageUrl}`);
  }

  async removeSquareBackgroundImage(e) {
    await this.removeBackgroundImage(e, BG_SQUARE_FILE, '方背景图');
  }

  async removeVerticalBackgroundImage(e) {
    await this.removeBackgroundImage(e, BG_VERTICAL_FILE, '竖背景图');
  }

  async removeBackgroundImage(e, filePath, type) {
    const index = parseInt(e.msg.match(/\d+/)[0], 10) - 1;
    const backgroundImages = this.loadBackgroundImages(filePath);

    if (index < 0 || index >= backgroundImages.length) {
      await e.reply(`无效的编号，请提供正确的${type}编号。`);
      return;
    }

    const removedImage = backgroundImages.splice(index, 1);
    this.saveBackgroundImages(filePath, backgroundImages);

    await e.reply(`已移除${type}：${removedImage}`);
  }

  async checkSquareBackgroundImage(e) {
    await this.checkBackgroundImage(e, BG_SQUARE_FILE, '方背景图');
  }

  async checkVerticalBackgroundImage(e) {
    await this.checkBackgroundImage(e, BG_VERTICAL_FILE, '竖背景图');
  }

  async checkBackgroundImage(e, filePath, type) {
    const index = parseInt(e.msg.match(/\d+/)[0], 10) - 1;
    const backgroundImages = this.loadBackgroundImages(filePath);

    if (index < 0 || index >= backgroundImages.length) {
      await e.reply(`无效的编号，请提供正确的${type}编号。`);
      return;
    }

    await e.reply(`正在检查${type} ${index + 1}，请稍后...`);

    const imageUrl = backgroundImages[index];
    try {
      const response = await fetch(imageUrl, { timeout: 10000 });
      if (!response.ok) {
        throw new Error(`链接状态码：${response.status}`);
      }
      await e.reply(segment.image(imageUrl), true);
      await e.reply(`${type} ${index + 1} 链接有效。`);
    } catch (error) {
      console.error(`${type} ${index + 1} 链接超时或不可用：`, error);
      await e.reply(`${type} ${index + 1} 链接超时或不可用。`);
      this.logger.error(`${type} ${index + 1} 链接检查失败：${error.message}`);
    }
  }
}

export default BackgroundImagesPlugin;